//
// Description: 数的范围
// Created by Loading on 2021/8/1.
//
// https://www.acwing.com/problem/content/description/791/

// 给定一个按照升序排列的长度为 n 的整数数组，以及 q 个查询。
// 对于每个查询，返回一个元素 k 的起始位置和终止位置（位置从 0 开始计数）。
// 如果数组中不存在该元素，则返回 -1 -1。

// 输入格式
// 第一行包含整数 n 和 q，表示数组长度和询问个数。
// 第二行包含 n 个整数（均在 1∼10000 范围内），表示完整数组。
// 接下来 q 行，每行包含一个整数 k，表示一个询问元素。
//
// 输出格式
// 共 q 行，每行包含两个整数，表示所求元素的起始位置和终止位置。
// 如果数组中不存在该元素，则返回 -1 -1。

// 数据范围
// 1≤n≤100000
// 1≤q≤10000
// 1≤k≤10000

// 输入样例：
// 6 3
// 1 2 2 3 3 4
// 3
// 4
// 5
// 输出样例：
// 3 4
// 5 5
// -1 -1


#include <bits/stdc++.h>

using namespace std;

vector<int> v;
int num_target;

// 区间[l, r]被划分成[l, mid]和[mid + 1, r]时使用：
/* 尽量往左寻找答案，寻找一个区间的左边界，最小XX，最短XX……等 */
int bsearch_1(int l, int r) {
    while (l < r) {
        int mid = l + (r - l >> 1);
        if (v[mid] >= num_target) {
            r = mid;    // check()判断mid是否满足性质
        } else {
            l = mid + 1;
        }
    }
    return l;
}

// 区间[l, r]被划分成[l, mid - 1]和[mid, r]时使用：
/* 尽量往右寻找答案，寻找一个区间的右边界，最大XX，最长XX……等 */
int bsearch_2(int l, int r) {
    while (l < r) {
        /* 如果使用 mid = l + ((r - l) >> 1) 可能出现死循环 */
        int mid = l + (r - l + 1 >> 1);
        if (v[mid] <= num_target) {
            l = mid;
        } else {
            r = mid - 1;
        }
    }
    return l;
}

int main() {
    int n, q;
    cin >> n >> q;
    vector<int> nums(n);
    for (int i = 0; i < n; ++i) {
        cin >> nums[i];
    }
    v = nums;

    for (int i = 0; i < q; ++i) {
        cin >> num_target;
        int left = bsearch_1(0, n - 1);
        if (v[left] != num_target) {
            // 数组中不存在该元素
            cout << "-1 -1" << endl;
        } else {
            int right = bsearch_2(0, n - 1);
            cout << left << " " << right << endl;
        }
    }
}